草庐IT

Java HotSpot 枚举开销

全部标签

c++ - 初始化枚举类类型的二维 std::array (C++11)

我在C++11中有以下类:classMyTable{public:enumclassEntryType{USED,FREE};MyTable(EntryTypevalue){for(uint32_ti=0;i,10>_table;}尝试构造一个值为EntryType::FREE的MyTable对象,二维数组中的每一项的值为0x01010101(每8位1b),而不是预期值0x1我猜这与我的value被转换为int有关,但我不知道我应该怎么做才能修复它。 最佳答案 memset()预计会以这种方式工作,因为它是setseachbyteo

c++ - 枚举类可以嵌套吗?

这可以做到吗?enumA{enumB{SOMETHING1,SOMETHING2};enumC{SOMETHING3,SOMETHING4};};如果没有,是否有替代解决方案?这个问题的目的:想要/需要能够做这样的事情:enumclassElementaryParticleTypes{enumclassMATTER{enumclassMESONS{PI};enumclassBARYONS{PROTON,NEUTRON};enumclassLEPTONS{ELECTRON};};enumclassANTI_MATTER{enumclassANTI_MESONS{ANTI_PI};enum

c++ - Typedef 适用于结构但不适用于枚举,仅适用于 C++

我有以下代码:test_header.h:typedefenum_test_enumtest_enum;enum_test_enum{red,green,blue};typedefstruct_test_structtest_struct;struct_test_struct{ints1;ints2;ints3;};测试.c:#include#includeintmain(){test_structs;s.s1=1;s.s2=2;s.s3=3;printf("Hello%d%d%d\n",s.s1,s.s2,s.s3);}test_cpp.cpp:extern"C"{#include}

c++ - 结构中的枚举 - C 与 C++

我正在尝试在结构中使用枚举,这可以编译并与gcc一起正常工作。但是使用g++编译时,相同的代码会抛出错误。#include#includestructfoo{enum{MODE1,MODE2,MODE3}mode;enum{TYPE1,TYPE2}type;};voidbar(structfoo*bar){bar->mode=MODE1;}intmain(){structfoo*foo=(structfoo*)malloc(sizeof(structfoo));bar(foo);printf("mode=%d\n",foo->mode);}使用gcc获得的输出:$gccfoo.c$./

java - 枚举外部驱动器

在java中,可以使用File.listRoots()获取系统中的所有驱动器。我只想获得外部驱动器,即USB驱动器、外部硬盘、光驱、软盘等。有什么办法可以用java实现吗?如果没有,原生C++代码也不错。在那种情况下,我需要Windows和Linux代码。 最佳答案 要获取文件系统信息,请使用类似的东西:importjava.io.*;importjavax.swing.filechooser.*;publicclassDriveTypeInfo{publicstaticvoidmain(String[]args){System.o

c++ - DLL函数调用的开销

从DLL调用函数时性能损失有多大?加载DLL对我们来说不是问题,对我们的highperf库的调用次数不会很大。大约,一次调用接管静态库调用需要多少指令/时钟周期? 最佳答案 我的答案是基于Linux/glibc/ELF动态链接器的工作原理,但我认为其他平台的总体答案是相同的:第一次调用动态加载的符号和接下来的调用是有区别的。第一次调用很昂贵,可能涉及许多周期。所有其他调用都或多或少1-2个指令。它的工作方式是链接器在过程链接表中设置一个条目,从全局偏移表中获取该外部函数的地址。首先调用GOT的地址指向一个运行动态链接器的stub来解

c++ - shared_ptr 是线程安全的开销是多少?

std::shared_ptr保证是线程安全的。我不知道典型的实现使用什么机制来确保这一点,但它肯定有一些开销。即使您的应用程序是单线程的,这种开销也会存在。是上述情况吗?如果是这样,如果您没有使用线程安全保证,这是否意味着它违反了“您不为未使用的东西付费”的原则? 最佳答案 如果我们检查cppreferencestd::shared_ptr的页面他们在实现说明部分陈述了以下内容:Tosatisfythreadsafetyrequirements,thereferencecountersaretypicallyincremented

c++ - 为什么我不能分配错误的枚举元素,但可以与错误的枚举元素进行比较?

使用以下C++定义:enumEnumA{EA_Element=1};enumEnumB{EB_Element=10};下面的代码不会编译,只有这样才有意义:EnumAvariable;variable=EB_Element;//won'tcompile但是下面的代码编译通过了:EnumAvariable=EA_Element;if(variable==EB_Element){//willcompile}虽然它没有任何意义-比较不同的枚举,这样的代码很可能是错误的。为什么这些看似相同的情况在C++中的处理方式不同? 最佳答案 它会编译

c++ - 为什么将单个枚举封装在一个结构中?

这是离开公司的人写的。我看不出有任何理由这样做,并且很好奇我是否遗漏了什么。enumthing_type_e{OPTION_A=0,OPTION_B,OPTION_C,OPTION_D};structthing_type_data_s{enum_type_emVariable;};我认为他可能会在结构中添加更多内容,但在查看它的使用方式后,我不这么认为。除非“他打算向结构中添加更多内容”,否则为什么要将单个枚举打包到结构中?有什么我没有想到的动机吗?更新:正如评论中所问,他以这种方式使用它:voidprocess_thing_type(thing_type_data_s*ParamVa

c++ - 如果内部的总工作相同,将 for 循环拆分为多个 for 循环的开销是多少?

这个问题在这里已经有了答案:Whyareelementwiseadditionsmuchfasterinseparateloopsthaninacombinedloop?(10个答案)Performanceofbreakingapartoneloopintotwoloops(6个答案)关闭9年前。像这样拆分for循环的开销是多少,inti;for(i=0;i像这样进入多个for循环?inti;for(i=0;i代码是性能敏感的,但执行后者会显着提高可读性。(如果重要的话,除了几个访问器外,每个循环内没有其他循环、变量声明或函数调用。)我不完全是一个低级编程大师,所以如果有人可以衡量与基